package com.ibm.news.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import com.ibm.news.beans.News;


public class NewsDAO {
	
	public ArrayList<News> getNewsAll() {
		Connection conn = DbConn.getConn();
		/*
		 * select 查询命令
		 * id, sortId...   数据库中的字段名， 如果查询所有，可以使用*代替，但不建议使用。
		 * from 与select 命令配合使用，后面跟查询的来源。
		 * tb_news 查询来源的表。
		 */
		
		String sql = "select id, sortId, content, createTime, bigSort, title from tb_news";
		try {
			Statement s = conn.createStatement();
			ResultSet rs = s.executeQuery(sql);
			ArrayList<News> alNews = new ArrayList<News>();
			while (rs.next()) {
				News ns = new News();
				ns.setId(rs.getInt("id"));
				ns.setSortId(rs.getInt("sortId"));
				ns.setContent(rs.getString("content"));
				ns.setCreateTime(rs.getString("createTime"));
				ns.setBigSort(rs.getString("bigSort"));
				ns.setTitle(rs.getString("title"));
				alNews.add(ns);
			}
			return alNews;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	public boolean insertNews(News news) {
		Connection conn = DbConn.getConn();
		/*
		 * insert SQL 插入数据库记录的命令。
		 * into 
		 * tb_news 插入的表名。
		 * （字段名列表）各字段名使用 "," 隔开, 必须是英文半角。
		 * values 对应的值在后面括号
		 * (字段的值)各字段名使用 "," 隔开。
		 */
		
		String sql = "insert into tb_news (sortId, content, createTime, bigSort, title) values (?, ?, ?, ?, ?)";
		//String sql = "insert into tb_news (sortId, content, createTime, bigSort, title) values (" + news.getSortId() + ",'" + news.getContent() + "','" +  news.getCreateTime() + "','" + news.getBigSort() + "','" + news.getTitle() + "')";
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setInt(1, news.getSortId());
			ps.setString(2, news.getContent());
			ps.setString(3, news.getCreateTime());
			ps.setString(4, news.getBigSort());
			ps.setString(5, news.getTitle());
			if (ps.executeUpdate() > 0) {
				return true;
			}
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		return false;
	}
	
	public boolean updateNews(News news) {
		Connection conn = DbConn.getConn();
		/*
		 * update 修改记录SQL关键字  命令。
		 * tb_news 要修改的表名。
		 * set 设置
		 * 字段名=字段值的列表。使用 "," 隔开, 必须是英文半角。
		 * where 条件
		 * id = 值   更新的条件。
		 */
		String sql = "update tb_news set sortId = ?, content = ?, createTime = ?, bigSort = ?, title = ? where id = ?";
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setInt(1, news.getSortId());
			ps.setString(2, news.getContent());
			ps.setString(3, news.getCreateTime());
			ps.setString(4, news.getBigSort());
			ps.setString(5, news.getTitle());
			ps.setInt(6, news.getId());
			if (ps.executeUpdate() > 0) {
				return true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}
	
	public boolean deleteNews(int id) {
		Connection conn = DbConn.getConn();
		
		/*
		 * delete SQL 删除命令
		 * from 来自
		 * tb_news 表名
		 * where 后跟条件
		 * id = 值  删除的条件。
		 */
		String sql = "delete from tb_news where id = ?";
		
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setInt(1, id);
			if (ps.executeUpdate() > 0) {
				return true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return false;
	}
	
	public News getNewsById(int id) {
		Connection conn = DbConn.getConn();
		String sql = "select id, sortId, content, createTime, bigSort, title from tb_news where id = " + id;
		try {
			Statement s = conn.createStatement();
			ResultSet rs = s.executeQuery(sql);
			News ns = new News();
			if (rs.next()) {
				
				ns.setId(rs.getInt("id"));
				ns.setSortId(rs.getInt("sortId"));
				ns.setContent(rs.getString("content"));
				ns.setCreateTime(rs.getString("createTime"));
				ns.setBigSort(rs.getString("bigSort"));
				ns.setTitle(rs.getString("title"));
			}
			return ns;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	public ArrayList<News> getNewsByTitle(String title) {
		Connection conn = DbConn.getConn();
		/*
		 * select 查询命令
		 * id, sortId...   数据库中的字段名， 如果查询所有，可以使用*代替，但不建议使用。
		 * from 与select 命令配合使用，后面跟查询的来源。
		 * tb_news 查询来源的表。
		 * 
		 * like 
		 */
		
		String sql = "select id, sortId, content, createTime, bigSort, title from tb_news where title like '%" + title + "%'";
		try {
			Statement s = conn.createStatement();
			ResultSet rs = s.executeQuery(sql);
			ArrayList<News> alNews = new ArrayList<News>();
			while (rs.next()) {
				News ns = new News();
				ns.setId(rs.getInt("id"));
				ns.setSortId(rs.getInt("sortId"));
				ns.setContent(rs.getString("content"));
				ns.setCreateTime(rs.getString("createTime"));
				ns.setBigSort(rs.getString("bigSort"));
				ns.setTitle(rs.getString("title"));
				alNews.add(ns);
			}
			return alNews;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	public ArrayList<News> getNewsByBigSort(String bigSort) {
		Connection conn = DbConn.getConn();
		/*
		 * select 查询命令
		 * id, sortId...   数据库中的字段名， 如果查询所有，可以使用*代替，但不建议使用。
		 * from 与select 命令配合使用，后面跟查询的来源。
		 * tb_news 查询来源的表。
		 * 
		 * like 
		 */
		
		String sql = "select id, sortId, content, createTime, bigSort, title from tb_news where bigSort = '" + bigSort + "'";
		try {
			Statement s = conn.createStatement();
			ResultSet rs = s.executeQuery(sql);
			ArrayList<News> alNews = new ArrayList<News>();
			while (rs.next()) {
				News ns = new News();
				ns.setId(rs.getInt("id"));
				ns.setSortId(rs.getInt("sortId"));
				ns.setContent(rs.getString("content"));
				ns.setCreateTime(rs.getString("createTime"));
				ns.setBigSort(rs.getString("bigSort"));
				ns.setTitle(rs.getString("title"));
				alNews.add(ns);
			}
			return alNews;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
}
